/**
 * @file 轨迹服务
 * @description 提供轨迹分析相关的服务，包括轨迹行为分析等功能
 * @author Assistant
 * @date 2024-03-01
 */

import { Injectable } from '@nestjs/common'
import { HttpService } from '@nestjs/axios'
import { ConfigService } from '@nestjs/config'
import { firstValueFrom } from 'rxjs'

/**
 * 轨迹服务类
 * @description 处理与轨迹分析相关的业务逻辑，集成百度鹰眼轨迹服务
 */
@Injectable()
export class TrackService {
  /**
   * 百度鹰眼API基础URL
   * @private
   */
  private readonly YINGYAN_API = 'https://yingyan.baidu.com/api/v3/track/'
  
  constructor(
    private readonly httpService: HttpService,
    private config: ConfigService
  ) {}

  /**
   * 分析轨迹行为
   * @description 使用百度鹰眼服务分析设备轨迹的行为特征，包括停留点、超速、急加速等
   * 
   * @param deviceId - 设备ID
   * @param period - 分析时间段
   * @param period.start - 开始时间
   * @param period.end - 结束时间
   * 
   * @returns 分析结果对象，包含各种行为特征的分析数据
   * @example
   * ```typescript
   * const result = await trackService.analyzeTrackBehavior(
   *   'device123',
   *   {
   *     start: new Date('2024-03-01'),
   *     end: new Date('2024-03-02')
   *   }
   * );
   * ```
   */
  async analyzeTrackBehavior(deviceId: string, period: { start: Date; end: Date }) {
    try {
      // 定义需要分析的行为类型
      const analysisTypes = [
        'stay_point',     // 停留点分析
        'overspeed',      // 超速分析
        'harsh_acceleration', // 急加速
        'harsh_braking',  // 急刹车
        'harsh_steering'  // 急转弯
      ]

      // 构建请求参数
      const params = {
        ak: this.config.get('BAIDU_MAP_AK'),
        service_id: this.config.get('YINGYAN_SERVICE_ID'),
        entity_name: deviceId,
        start_time: Math.floor(period.start.getTime() / 1000),
        end_time: Math.floor(period.end.getTime() / 1000),
        analysis_items: analysisTypes.join(',')
      }

      // 发送请求并获取分析结果
      const res = await firstValueFrom(
        this.httpService.get<Record<string, any>>(`${this.YINGYAN_API}analysis/track`, { params })
      )
      return res.data ?? {}
    } catch (error) {
      console.error('轨迹分析失败:', error)
      return {}
    }
  }
} 